// 数据库初始化脚本
// 用于创建candidates集合的索引，提高查询性能

const cloud = require('wx-server-sdk')

cloud.init({
  env: cloud.DYNAMIC_CURRENT_ENV
})

const db = cloud.database()

// 候选人数据结构说明
/*
candidates集合字段：
- _id: string (自动生成)
- name: string (候选人姓名/作品标题) *必填
- description: string (作品描述，无字数限制)
- images: array (图片URL数组，最多12张)
- videoUrl: string (视频URL)
- videoPoster: string (视频封面URL)
- extraInfo: string (额外信息)
- activityId: string (所属活动ID) *必填
- votes: number (投票数，默认0)
- ranking: number (排名，默认0)
- createdBy: string (创建者openid)
- createdAt: Date (创建时间)
- updatedAt: Date (更新时间)
- status: string (状态：active/inactive/deleted)
- deletedAt: Date (删除时间，软删除时)
- deletedBy: string (删除者openid，软删除时)
*/

async function initDatabase() {
  try {
    console.log('开始初始化candidates集合索引...')

    // 创建复合索引：activityId + status (常用查询组合)
    await db.collection('candidates').createIndex({
      keys: {
        activityId: 1,
        status: 1
      },
      name: 'activity_status_index'
    })

    // 创建索引：votes (按票数排序)
    await db.collection('candidates').createIndex({
      keys: {
        votes: -1 // 降序排列
      },
      name: 'votes_desc_index'
    })

    // 创建索引：createdAt (按创建时间排序)
    await db.collection('candidates').createIndex({
      keys: {
        createdAt: 1
      },
      name: 'created_at_index'
    })

    // 创建索引：status (按状态筛选)
    await db.collection('candidates').createIndex({
      keys: {
        status: 1
      },
      name: 'status_index'
    })

    // 创建复合索引：createdBy + status (管理员查看自己创建的候选人)
    await db.collection('candidates').createIndex({
      keys: {
        createdBy: 1,
        status: 1
      },
      name: 'creator_status_index'
    })

    console.log('candidates集合索引创建完成！')
    
    return {
      success: true,
      message: '数据库初始化完成'
    }
  } catch (error) {
    console.error('数据库初始化失败:', error)
    return {
      success: false,
      message: '数据库初始化失败',
      error: error.message
    }
  }
}

// 导出初始化函数
module.exports = {
  initDatabase
}

// 如果直接运行此脚本，则执行初始化
if (require.main === module) {
  initDatabase().then(result => {
    console.log('初始化结果:', result)
  })
} 